#include "config.h"



int32_t loadConfig(char *pathFS,char *modoInicio,char *idDisco, char *dirIp,
					char *puerto, char *c, char *h,char *s, char *algoritmo,
					char *dirIpLocal,char *puertoLocal,char *delayLectura,
					char *delayEscritura, char *rpm,char *tiempoSaltoPistasMs,
					char *hayQLoguear, char *pathConsola, char* ConfigConsola){
	FILE *archivo;
	char *buffer, *parametro;


	buffer = malloc(sizeof(char)*200);
	parametro = malloc(sizeof(char)*200);


	 archivo = fopen("config.txt", "r");

	if (archivo == NULL) /*controlo que abrio el archivo*/
	{
		//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),2,"Archivo no encontrado","");
		printf("Error al abrir el archivo de configuracion \n");
		return 0;
	}

	while(!feof(archivo))
	{
		fgets(buffer,200,archivo);
		strcpy(parametro,parametroEnLinea(buffer));
		if(strcmp(parametro,"pathFatFile") == 0)
		{
			//strcpy(pathFS,"/home/utn_so/Escritorio/prueba.disk");
			strcpy(pathFS,valorLinea(buffer));
			pathFS[posicionCharEnCadena(pathFS,'\n')]='\0';
			printf("pathfatfile = %s \n",pathFS);
		}
		if(strcmp(parametro,"pathConsola") == 0)
		{
			//strcpy(pathFS,"/home/utn_so/Escritorio/prueba.disk");
			strcpy(pathConsola,valorLinea(buffer));
			pathConsola[posicionCharEnCadena(pathConsola,'\n')]='\0';
			printf("pathConsola = %s \n",pathConsola);
		}
		if(strcmp(parametro,"ConfigConsola") == 0)
		{
			//strcpy(pathFS,"/home/utn_so/Escritorio/prueba.disk");
			strcpy(ConfigConsola,valorLinea(buffer));
			ConfigConsola[posicionCharEnCadena(ConfigConsola,'\n')]='\0';
			printf("ConfigConsola = %s \n",ConfigConsola);
		}
		else if(strcmp(parametro,"tiempoSaltoPistasMs") == 0)
		{
			strcpy(tiempoSaltoPistasMs,valorLinea(buffer));
			printf("tiempoSaltoPistasMs= %s\n", tiempoSaltoPistasMs);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"modoInicio") == 0)
		{
			strcpy(modoInicio,valorLinea(buffer));

			modoInicio[posicionCharEnCadena(modoInicio,'\n')]='\0';
			printf("modoInicio= %s\n", modoInicio);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"idDisco") == 0)
		{
			strcpy(idDisco,valorLinea(buffer));
			printf("idDisco= %s\n", idDisco);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"log") == 0)
		{
			strcpy(hayQLoguear,valorLinea(buffer));
			printf("%s\n",hayQLoguear);
		}
		else if(strcmp(parametro,"direccionIpLocal") == 0)
		{
			strcpy(dirIpLocal,valorLinea(buffer));
			printf("dirIpLocal= %s\n", dirIpLocal);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"puertoLocal") == 0)
		{
			strcpy(puertoLocal,valorLinea(buffer));
			printf("puertoLocal= %s\n", puertoLocal);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"direccionIp") == 0)
		{
			strcpy(dirIp,valorLinea(buffer));
			printf("dirIp= %s\n", dirIp);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"puerto") == 0)
		{
			strcpy(puerto,valorLinea(buffer));
			printf("puerto= %s\n", puerto);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"algoritmo") == 0)
		{
			strcpy(algoritmo,valorLinea(buffer));
			printf("algoritmo= %s\n", algoritmo);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"delayLectura") == 0)
		{
			strcpy(delayLectura,valorLinea(buffer));
			printf("delayLectura= %s\n", delayLectura);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"delayEscritura") == 0)
		{
			strcpy(delayEscritura,valorLinea(buffer));
			printf("delayEscritura= %s\n", delayEscritura);
			//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"delayEscritura") == 0)
		{
			strcpy(delayEscritura,valorLinea(buffer));
			printf("delayEscritura= %s\n", delayEscritura);
					//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"rpm") == 0)
		{
			strcpy(rpm,valorLinea(buffer));
			printf("rpm= %s\n", rpm);
					//loguear("Configuracion",GetCurrentProcessId(),GetCurrentThreadId(),GetProcessHeap(),0,"IP del Servidor =",DireccionIP);
		}
		else if(strcmp(parametro,"c") == 0)
		{
			strcpy(c,valorLinea(buffer));

		}
		else if(strcmp(parametro,"h") == 0)
		{
			strcpy(h,valorLinea(buffer));
		}
		else if(strcmp(parametro,"s") == 0)
		{
			strcpy(s,valorLinea(buffer));

		}
		else if(strcmp(parametro,"EOF") == 0)
		{

			fclose (archivo);
			free (buffer);
			free(parametro);
			break;

		}
	}

	return 1;

}


char *parametroEnLinea(char *cadena) /*DEVUELVE UNA CADENA CON EL PARAMETRO DEL CONFIG */
{
	char *aux;

	aux=cadena;
	aux[posicionCharEnCadena(aux,'=')]='\0';

	return aux;
}



char *valorLinea(char *cadena) /*DEVUELVE UNA CADENA CON LOS CARACTERES DESPUES DEL '=' */
{
	while(*cadena!='=' && *cadena!='\0')
	{
		cadena++;
	}
	cadena++;

	return cadena;
}


int32_t posicionCharEnCadena(char *cadena, const char caracter) /*DEVUELVE UN INTEGER CON LA CANTIDAD DE CARACTERES antes  DEL SEP */
{
	int32_t cont=0;
	while(*cadena!=caracter)
	{
		cont++;
		cadena++;
	}
	return cont;
}
